'''
正则表达式主要作用：一行胜千言，用于字符串匹配
常用操作符：
. ---- 表示任何单个字符
[]---- 字符集，对单个字符给出取值范围  |abc|表示a\b\c，|a-z|表示a到z的单个字符
[^]--- 非字符串，对单个字符给出排除范围 |^abc| 表示非a或非b或非c的单个字符
* ----- 前一个字符0次或无限次扩展       abc* 表示 ab\abc\abcc\abccc等
+ ----- 前一个字符1次或无限次扩展       abc+ 表示abc\abcc\abccc等
? ----- 前一个字符0次或1次扩展          abc?表示ab或abc
| ----- 左右表达式任意一个              abc|def表示abc\def
{m} ---- 扩展前一个字符m次              ab{2}c表示abbc
{m,n} --- 扩展前一个字符m至n次          ab{1,2}c表示abc\abbc
^ -------- 匹配字符串开头                ^abc表示abc且在一个字符串的开头
$ -------- 匹配字符串结尾               abc$表示abc且在一个字符串的结尾
()-------- 分组标记                     （abc）表示abc，（abc|def）表示abc、def
\d ------- 数字，等价于|0-9|
\w ------- 单纯字符，等价于|A-Za-z0-9|
'''

'''
P(Y|YT|YTH|YTHO)?N                  PN PYN PYTN PYTHN PYTHON
PYTHON+                             PYTHON PYTHONN PYTHONNN...
PY[TH]ON                            PYTON PYHON
PY[^TH]ON                           PYaON PYbON
PY{:3}N                             PYN PN PYYN PYYYN
'''
'''
经典正则表达式
^[A-Za-z]+$                     由26个字母组成的字符串
^[A-Za-z0-9]+$                  由26个字母和数字组成的字符串
^-?\d+$                         整数型式的字符串
^[0-9]*[1-9][0-9]*$             正整数形式的字符串
[1-9]\d{5}                      中国境内邮政编码，6位
[\u4e00-\u9fa5]                 匹配中文字符
\d{3}-d{8}|\d{4}-d{7}           国内电话号码

'''

'''
RE库的基本使用，主要用于字符串匹配
'''
import re
## raw string 类型（原生字符串类型）
## re.search()\re.match()\re.findall()\re.split()\re.finditer()\re.sub()

# re,search(pattern,string,flags=0)
post = r'[1-9]\d{5}'
str1 ='130031 aoa tsf 138945'
match = re.search(post, str1)
if  match:
	print(match.group(0))
# re.match(pattern, string ,flags=0)

match = re.match(post,str1)
if  match:
	print(match.group(0))
	
ls = re.findall(post, str1)
print(ls)

ls1 = re.split(post, str1, maxsplit=1)
print(ls1)

for item in re.finditer(post,str1):
	if item:
		print(item.group(0))

print(re.sub(post, 'zipcode', str1))

## re库的match对象 regex = re.compilt(match)
## .string 待匹配的文本
## .re  匹配使用的正则表达式
## .pos 搜索开始的位置
## .endpos 搜索结束的位置
## .group(0)
## .start()
## .end()
## .span()
print(match.string)
print(match.re)
print(match.pos)
print(match.endpos)
print(match.group(0))
print(match.start(), match.end(), match.span())

## 贪婪匹配，re库默认采用贪婪匹配
m = re.search(r'PY.*N','PYANBNCNDN')
m1 = re.search(r'PY.*?N','PYANBNCNDN')
print(m.group(0), m1.group(0))
